package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jt.mapper.ItemDescMapper;
import com.jt.mapper.ItemMapper;
import com.jt.pojo.Item;
import com.jt.pojo.ItemDesc;
import com.jt.vo.ItemVO;
import com.jt.vo.PageResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;

import java.util.List;


@Service
public class ItemServiceImpl implements ItemService{
    @Autowired
    private ItemMapper itemMapper;

    @Autowired
    private ItemDescMapper itemDescMapper;

    @Override
    public PageResult getItemList(PageResult pageResult) {
        // 判断 用户传的参数 query 不是 " " 为 true 否者为 false
        boolean length = StringUtils.hasLength(pageResult.getQuery());
        // 创建条件构造器
        QueryWrapper<Item> queryWrapper = new QueryWrapper<>();
        queryWrapper.like(length, "title",pageResult.getQuery());
        // 为了使用 mybatisPlus API 所以将我们自己的数据封装到 Page 对象中
        Page<Item> itemPage = new Page<>(pageResult.getPageNum(), pageResult.getPageSize());
        itemPage = itemMapper.selectPage(itemPage, queryWrapper);
        // 获取 page 中我们需要的信息
        long total = itemPage.getTotal();
        List<Item> records = itemPage.getRecords();
        // 将数据封装给PageResult 对象
        return pageResult.setTotal(total).setRows(records);
    }

    @Override
    public void saveItem(ItemVO itemVO) {
        // 获取 itemVO 对象中的 Item 对象  并设置状态值
        Item item = itemVO.getItem().setStatus(true);
        // 将 item 添加到数据库中
        itemMapper.insert(item);
        // 获取 itemVO 对象中的 itemDesc 对象  根据 item 的id  设置 itemDesc 的id
        // mybatis 提供了 在添加数据后即可进行数据回显的功能，如果没有此功能 item的id应该为null
        ItemDesc itemDesc = itemVO.getItemDesc().setId(item.getId());
        itemDescMapper.insert(itemDesc);
    }

    @Override
    @Transactional
    public void deleteItemById(Integer id) {
        itemMapper.deleteById(id);
        itemDescMapper.deleteById(id);
    }

    @Override
    public void updateItemStatus(Item item) {
        itemMapper.updateById(item);
    }
}
